using System;
using System.Collections.Generic;
using System.Text;
using PuenteInterfase;
using System.Windows.Forms;

namespace Vista
{
    public class vistaGuitarra
    {
		private Dictionary<int, Label> _bloques;
		private frmGuitarra _ventana;

        public vistaGuitarra(IJuego juego)
        {
			// seleccionamos que eventos son los que 
			// vamos a escuchar del juego (o sea 
			// que eventos son los que vamos a dibujar)

			juego.AlAgregarseUnBloque += new DelAlAgregarseUnBloque(juego_AlAgregarseBloque);
			juego.AlMoverseUnBloque += new DelAlMoverseUnBloque(juego_AlMoverseUnBloque);
			juego.AlBorrarseUnBloque += new DelAlBorrarseUnBloque(juego_AlBorrarseUnBloque);

			// inicializamos nuestras variables 
			_bloques = new Dictionary<int, Label>();
			_ventana = new frmGuitarra();
			_ventana.Visible = true;
        }

		void juego_AlBorrarseUnBloque(BloqueaTocar bloque)
		{
			Label lbl = _bloques[bloque.Id];
			_ventana.Controls.Remove(lbl);

			_bloques.Remove(bloque.Id);

			_ventana.Refresh();
		}

		void juego_AlMoverseUnBloque(BloqueaTocar bloque)
		{
			// aca esta el codigo que mueve la "vista" del bloque
			// qeu nos digan que se movio

			// agarramos la representacion grafica del bloque a mover
			// que se supone que vamos a tocar
			Label lbl = _bloques[bloque.Id];
			lbl.Location = new System.Drawing.Point (lbl.Location.X, _ventana.LineaBaseBloques + (int)bloque.PosicionY);
			lbl.Refresh();
			//_ventana.Refresh();
			System.Diagnostics.Debug.WriteLine(bloque.Id.ToString() + ", " + bloque.PosicionY.ToString());
		}

		void juego_AlAgregarseBloque(BloqueaTocar bloque)
		{
			// aca colocamos el codigo para 
			// agregar visualmente un nuevo bloque
			Label lbl = new Label();
			lbl.Location = new  System.Drawing.Point (_ventana.PosicionIesimaCuerda(bloque.CuerdaASerLanzado), _ventana.LineaBaseBloques);
			lbl.Text = "bloque " + bloque.Id.ToString();
			lbl.BackColor = System.Drawing.Color.Blue;
			lbl.Width = 46;
			_ventana.Controls.Add(lbl);
			_ventana.Refresh();

			// la agregamos a nuestra coleccion de elementos
			// para uqe despues podamos animarla
			// cuando nos dicen que se tiene que mover
			_bloques.Add(bloque.Id, lbl);
		}
    }
}
